iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0
自我挑戰組

轉職未滿一年的點點滴滴系列 第 10

[Day 10] -『 GO語言學習筆記』- if 敘述的起始賦值

  • 分享至 

  • xImage
  •  

以下筆記摘錄自『 The Go Workshop 』。

我們時常呼叫某個函式,但只會拿函式的回傳值來檢查它是否正確執行,之後就再也不需要這個值了。比方說寫入檔案、將資料存入資料庫等等,只是想確認動作執行完畢後有沒有發生問題。

這種情況下,函式傳回的變數後面就用不到了,但只要你接收它,那這些資料就會存在其作用範圍內,等於是多佔了一份記憶體。為了避免放費,可以把變數的作用範圍限制在if敘述範圍,這樣只要離開if敘述,該變數就會消滅。

起始賦值敘述(init statement)

If <起始賦值敘述>; <布林值運算式> {
    <程式區塊>
}

注意Go語言只允許在<起始賦值敘述>使用以下簡單的敘述:

  1. 變數賦值和短變數宣告賦值,例如i := 0
  2. 算數或邏輯運算式,例如i :=(j * 10) == 40
  3. 遞增或遞減的運算式,例如i++
  4. 在並行性運算中傳值給通道的敘述

最常犯得錯誤就是企圖在起始賦值敘述用var定義變數,這是不允許的,只能在這裡使用短變數宣告。

For example,

package main

import (
	"errors"
	"fmt"
)

func validate(input int) error {
	if input < 0 {
		return errors.New("輸入值不得為負")
	} else if input > 100 {
		return errors.New("輸入值不得超過 100")
	} else if input%7 == 0 {
		return errors.New("輸入值不得為 7 的倍數")
	} else {
		return nil
	}
}

func main() {
	input := 21
	if err := validate(input); err != nil {
		fmt.Println(err)
	} else if input%2 == 0 {
		fmt.Println(input, "是偶數")
	} else {
		fmt.Println(input, "是奇數")
	}
}

//output
輸入值不得為 7 的倍數

使用起始賦值敘述定義一個變數err,並對他賦值,然後將這個變數拿來用在if敘述的布林值運算中,只要main()的if...else if...else完成任務後,err變數就會離開作用範圍,被Go語言的記憶體管理系統回收。


上一篇
[Day 9] - 『轉職工作的Lessons learned』 - GraphQL (Hasura) - Webhook身份驗證
下一篇
[Day 11] -『 GO語言學習筆記』- switch 敘述
系列文
轉職未滿一年的點點滴滴30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言